package tedu.week03.exception;

/**
 * <pre>
 *      异常类的练习.
 * </pre>
 *
 * @author : resty
 * @date : 2019年07月24日    19时
 **/
public class DemoException {
    public static void main(String[] args)  {

        /**
         * 断言的使用.
         */

        int xs[] = {1,2,3};
        assert xs.length==3;
        if(true){
            System.out.println("test");
            return;
        }
        /**
         * 异常执行流程测试:
         *  try catch finally 在有return时的执行顺序
         *
         *  程序正常时:
         *      try-->在有return时,先执行完finally里面的代码再return.
         *  程序异常时:
         *      try执行到有错误的代码-->catch-->finally-->后续代码
         *
         *  如果需要try时执行完就不再执行,用return还会执行finally里面的代码.可以用System.exit(0)的方法退出JVM
         *
         *
         */

//        int d = 0;
//        System.out.println("程序开始");
//        try{
//            int b =  (10 / d);
//            System.out.println("b的值是:"+b);
//            return ;
//        }catch(Exception e ){
//            e.printStackTrace();
//        }finally {
//            System.out.println("代码一定会执行.");
//        }
//        System.out.println("程序结束");
//
//



        /**
         * 自定义异常示例2:
         *  继承自RuntimeException
         */
//        int age = 230;
//        if(age<=0){
//            throw new AgeLT0Exception();
//        }else if(age>=150){
//            throw new AgeLG150Exception();
//        }else{
//            System.out.println("您输入的年龄是:"+age+"岁.");
//        }

        /**
         * 自定义异常示例1:
         *  继承自Exception
         */

//        double price = -300.05;
//
//        if(price>=0){
//            price-=100;
//            System.out.println("可以正常消费");
//        }else{
//            try {
//                throw new Exp1();
//            } catch (Exp1 exp1) {
//                exp1.printStackTrace();
//            }
//        }


        /**10/0示例*/
//        int a = 10 ;
//        int b = 0 ;
//        int temp = a/b;
//        System.out.println("两个数相除的结果是:"+temp);
    }
}


/**
 * 继承自Exception异常需要在编译期就进行处理.
 */
class Exp1 extends Exception{
    Exp1 (){
        this("您的余额不足.");
    }

    Exp1(String s){
        super(s);
    }

}

class AgeLT0Exception extends  RuntimeException{
    AgeLT0Exception (){
        this("您的年龄小于0岁");
    }

    AgeLT0Exception(String s){
        super(s);
    }
}

class AgeLG150Exception extends  RuntimeException{
    AgeLG150Exception (){
        this("您的年龄大于150岁");
    }

    AgeLG150Exception(String s){
        super(s);
    }
}
